﻿using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using Model.Refeicoes;
using SandTrap.WebControls;
using Services.Refeicoes;

namespace welwitschia.Requisicoes
{
    public partial class RequisicaoOpcoes : System.Web.UI.Page
    {
        protected Boolean _editable = true;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (!String.IsNullOrEmpty(Request.QueryString["rcid"]) && !String.IsNullOrEmpty(Request.QueryString["dt"]))
                {
                    hfIdRefeicaoContratada.Value = Request.QueryString["rcid"];
                    hfData.Value = Request.QueryString["dt"];
                    hfNumeroRequisicao.Value = Request.QueryString["nr"];
                    IList<RefeicaoOpcao> lRefeicaoOpcao = RefeicaoService.ObterListaRefeicaoOpcao(
                                                              Convert.ToInt64(hfIdRefeicaoContratada.Value),
                                                              DateTime.ParseExact(hfData.Value, "yyyyMMdd", null));
                    hfIdUnidade.Value = lRefeicaoOpcao[0].Refeicao.RefeicaoContratada.Contrato.Unidade.IdUnidade.ToString();

                    lvOpcoes.DataSource = lRefeicaoOpcao;
                    lvOpcoes.DataBind();


                    IList<RefeicaoUnidade> lRefeicaoUnidade = RefeicaoService.ObterRefeicaoUnidadeContratadas(
                                                              Convert.ToInt64(hfIdRefeicaoContratada.Value),
                                                              DateTime.ParseExact(hfData.Value, "yyyyMMdd", null));
                    lvVendas.DataSource = lRefeicaoUnidade;
                    lvVendas.DataBind();

                    Refeicao refeicao = lRefeicaoOpcao[0].Refeicao;
                    if (refeicao.CodEstadoRefeicao == EstadoRefeicao.Fechada)
                    {
                        _editable = false;
                    }

                }
                else
                {
                    throw new Exception("Identificador de refeição inválido.");
                }
            }

        }

        

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            Response.Redirect(String.Format("~\\Requisicoes\\RequisicaoDetalhe.aspx?uid={0}&dt={1}",
                  hfIdUnidade.Value, hfData.Value));
        }

        protected void btnContinuar_Click(object sender, EventArgs e)
        {

            IList<RefeicaoOpcao> lRefeicaoOpcao = RefeicaoService.ObterListaRefeicaoOpcao(
                                                      Convert.ToInt64(hfIdRefeicaoContratada.Value),
                                                      DateTime.ParseExact(hfData.Value, "yyyyMMdd", null));

            foreach (RefeicaoOpcao ro in lRefeicaoOpcao)
            {
                Label lblOpcao = null;
                TextBox txtDescricao = null;
                for (Int32 i = 0; i < lvOpcoes.Items.Count; i++)
                {
                    lblOpcao = (Label)lvOpcoes.Items[i].Controls[1].Controls[0].Controls[1];
                    if (lblOpcao.Text == ro.TipoOpcao.Descricao)
                    {
                        txtDescricao = (TextBox)lvOpcoes.Items[i].Controls[1].Controls[1].Controls[1];
                        ro.Descricao = txtDescricao.Text;
                    }
                }
            }

            RefeicaoService.Actualiza(lRefeicaoOpcao);

            IList<RefeicaoUnidade> lRefeicaoUndiade = RefeicaoService.ObterListaRefeicaoUnidades(
                                                    Convert.ToInt64(hfIdRefeicaoContratada.Value),
                                                    DateTime.ParseExact(hfData.Value, "yyyyMMdd", null));

            Decimal totalVendas = 0;
            foreach (RefeicaoUnidade ru in lRefeicaoUndiade)
            {
                HiddenField lvhfIdUnidade = null;
                NumberBox nbRefeicoesPrevistas  = null;
                for (Int32 i = 0; i < lvVendas.Items.Count; i++)
                {
                    lvhfIdUnidade = (HiddenField)lvVendas.Items[0].Controls[1].Controls[0].FindControl("lvhfIdUnidade");
                    if (Convert.ToInt64(lvhfIdUnidade.Value) == ru.Unidade.IdUnidade)
                    {
                        nbRefeicoesPrevistas = (NumberBox)lvVendas.Items[0].Controls[1].Controls[0].FindControl("nbRefeicoesPrevistas");
                        if(nbRefeicoesPrevistas.Amount.HasValue)
                            ru.RefeicoesPrevistas = nbRefeicoesPrevistas.Amount;
                    }
                }

                if(ru.RefeicoesPrevistas.HasValue)
                    totalVendas += ru.PrecoRefeicao * ru.RefeicoesPrevistas.Value;
            }

            RefeicaoService.Actualiza(lRefeicaoUndiade);

            Refeicao refeicao = RefeicaoService.ObterRefeicao(Convert.ToInt64(hfIdRefeicaoContratada.Value),
                                                                      DateTime.ParseExact(hfData.Value, "yyyyMMdd", null));
            refeicao.TotalVendasPrevisto = totalVendas;
            if (refeicao.TotalCustosPrevisto.HasValue && totalVendas > 0)
                refeicao.RacioMateriasPrimasPrevisto = refeicao.TotalCustosPrevisto.Value / totalVendas; 
            else 
                refeicao.RacioMateriasPrimasPrevisto = 0;

            RefeicaoService.Actualiza(refeicao);

            Response.Redirect(String.Format("~\\Requisicoes\\RequisicoesProdutos.aspx?rcid={0}&nr={1}&dt={2}&uid={3}",
                hfIdRefeicaoContratada.Value, hfNumeroRequisicao.Value, hfData.Value, hfIdUnidade.Value));
        }



        #region Eventos ListView Vendas

        protected void lvVendas_ItemDeleting(object sender, ListViewDeleteEventArgs e)
        {
        }

        protected void lvVendas_ItemEditing(object sender, ListViewEditEventArgs e)
        {
        }

        protected void lvVendas_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
        }


        #endregion


        #region Eventos ListView Opcoes
        
        protected void lvOpcoes_ItemDeleting(object sender, ListViewDeleteEventArgs e)
        {
        }

        protected void lvOpcoes_ItemEditing(object sender, ListViewEditEventArgs e)
        {
        }

        protected void lvOpcoes_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
        }

     
        #endregion

        protected void lvOpcoes_DataBinding(object sender, EventArgs e)
        {
            
        }

        protected void lvOpcoes_DataBound(object sender, EventArgs e)
        {
            
        }

    }
}